home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
language
/
modula.zoo
/
_defn_m2loader.def
< prev
next >
Wrap
Text File
|
1988-04-26
|
4KB
|
109 lines
DEFINITION MODULE M2Loader; (* C. Vetterli, 22-Dec-85 / 22-Dec-85 *)
FROM SYSTEM IMPORT ADDRESS;
FROM GEMX IMPORT BasePage;
CONST
MaxPrograms = 6;
TYPE
Status = (normal, moduleNotFound, fileNotFound, illegalKey, readError,
badSyntax, noMemory, alreadyLoaded, killed, tooManyPrograms,
continue, noApplication);
ModuleName = ARRAY[0..21] OF CHAR; (* 16 Byte for name *)
(* 3 Words for key *)
ProcEntryPtr = POINTER TO ProcEntryDesc;
ProcEntryDesc = RECORD
flags: INTEGER;
procModRef: ARRAY[0..255] OF LONGINT
END;
ModulePtr = POINTER TO ModuleDesc;
ModuleDesc = RECORD
link: ModulePtr;
modPtr: ADDRESS;
modSize: LONGINT;
dataPtr: ProcEntryPtr;
valA4: LONGINT;
mName: ModuleName;
numOfMods,
numOfProcs,
codeLen,
level: INTEGER;
leaveLoaded: BOOLEAN
END;
ErrMessProc = PROCEDURE(Status);
BeginHaltProc = PROC; (*DS*)
EndHaltProc = PROCEDURE(BOOLEAN); (*TRUE:PRG Weiter, FALSE:PRG Abbruch *)
VAR
DisplayLoaderStatus: ErrMessProc; (* link your own message handler *)
BasePagePtr: POINTER TO BasePage;
SystemDrive: CHAR;
SystemPath: ARRAY [0..63] OF CHAR;
curLevel: INTEGER; (*DS*)
debugResident: BOOLEAN; (*DS*)
BeginHalt: BeginHaltProc; (* wird am Anfang bzw. am Ende des *)
EndHalt: EndHaltProc; (* HaltHandlers aufgerufen *)
(* fuer die Beschreibung der folgenden Funktionen siehe MacMETH User Manual *)
PROCEDURE Allocate (VAR ptr: ADDRESS; size : LONGINT);
PROCEDURE Deallocate (VAR ptr : ADDRESS);
PROCEDURE Call (module, cmdline: ARRAY OF CHAR; leaveLoaded: BOOLEAN;
VAR status: Status);
PROCEDURE Terminate (status: Status);
PROCEDURE DisplayStatus (status: Status);
PROCEDURE GetProcessStatus (VAR err: ARRAY OF CHAR);
PROCEDURE GetNextModule (VAR modNo: INTEGER; VAR dataBase: LONGINT;
VAR modName: ARRAY OF CHAR);
PROCEDURE GetNextProcedure (VAR modNo: INTEGER; VAR dataBase: LONGINT;
VAR relPC: INTEGER);
PROCEDURE InitProcedure (init: PROC; VAR done: BOOLEAN);
PROCEDURE TermProcedure (term: PROC; VAR done: BOOLEAN);
PROCEDURE FindModule (dataBase, pc: LONGINT; VAR modPtr: ModulePtr;
VAR relPC, modNo: INTEGER; VAR found: BOOLEAN);
PROCEDURE SetError (errMP, errPC, errA4: LONGINT; errNum: INTEGER);
(* Implementierung einer Suchstrategie für die Bibliotheksmoduln.
Sucht benötigte Files, die nicht im aktuellen Directory
stehen, in den Directories, die im File mit dem Namen FName
(aktuelles Dir) eingetragen sind.
Achtung: Der eingetragene Pfadname muss so sein, dass der
Filename gerade noch angehängt zu werden braucht !
Das betrifft insbesondere die Delimiter!! *)
CONST
maxNameLen = 39;
tablesize = 20;
TYPE
nametype = ARRAY [0..maxNameLen] OF CHAR;
Path = POINTER TO nametype;
VAR
Table: ARRAY [1..tablesize] OF Path;
paths: ARRAY [1..tablesize] OF nametype;
PROCEDURE FindPath (VAR p: Path; VAR FileName: ARRAY OF CHAR; VAR i: INTEGER);
PROCEDURE AddPath (p: Path; VAR relFileName: ARRAY OF CHAR;
VAR absFileName: ARRAY OF CHAR);
END M2Loader.